<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // JS的error处理
        // 在JavaScript中的错误分为3种：语法错误、程序错误、逻辑错误
        // 语法错误：程序在预处理时检测代码结构报错，特点程序尚未执行
        // 程序错误：程序直到错误位置，由js引擎报错，特点是会终止程序执行
        // 逻辑错误: 程序没有报错，但是执行的结果和预期不符。

        /*
        console.log("start...");
        // console.log(aa); //ReferenceError: 引用的变量不存在
        // let m = 10;
        // m();  // TypeError: m is not a function
        //if(true){}
        // RangeError: 数据值不在其所允许的范围内
        function fn1() {
            fn1()
        }
        fn1() //RangeError: Maximum call stack size exceeded

        console.log("end...");
        */

        // 总结：上面的程序错误都会导致js程序的中断运行
        // 如何让程序报错后还不中断运行？
        // 使用try...catch

        console.log("start...");

        try { // try用于捕获异常（错误）
            //console.log(mm);
            let m = 0;
            if(m === 0){ // 判断并人为的抛出错误！
                throw new Error("初始m不可以为零");
            }
            console.log(100/m);
            console.log("aaaaaa");
        } catch (error) { // 处理错误
            // 异常处理（错误处理）
            //console.log("出错了", error.message); // 输出错误消息
            //console.log("出错了", error.stack); // 输出错误栈消息
            console.log("出错了", error); // 输出错误对象

        }
        

        console.log("end...");
        




    </script>
</body>
</html>